package demo

type Token struct {
	Id        int
	Name      string
	TokenInfo *TokenInfo `gorm:"foreignkey:TokenId"`
}

type TokenInfo struct {
	Id      int
	Name    string
	TokenId int    `gorm:"unique"` // 设置外键 一对一情况下唯一约束
	Token   *Token `gorm:"foreignkey:TokenId"`
}

func OneToOne() {
	Init()
	// DB.AutoMigrate(&TokenInfo{}, &Token{})

	//一对一创建
	// DB.Create(&TokenInfo{Name: "tokenInfo2", Token: &Token{Name: "token2"}})
	// DB.Create(&Token{Name: "token3", TokenInfo: &TokenInfo{Name: "tokenInfo3"}})

	// tokenInfo绑定Token
	// DB.Create(&TokenInfo{Name: "tokenInfo4", TokenId: 4})

	//查询 正查
	// var id int = 9
	// var tokenInfo TokenInfo
	// DB.Debug().Preload("Token").Take(&tokenInfo, "token_id = ?", id)
	// jsonData, _ := json.Marshal(tokenInfo)
	// fmt.Println(string(jsonData))

	//反查
	// var token Token
	// DB.Debug().Preload("TokenInfo").Take(&token, id)
	// jsonData, _ = json.Marshal(token)
	// fmt.Println(string(jsonData))

	//级联删除
	var token Token
	DB.Unscoped().Take(&token)
	DB.Unscoped().Select("TokenInfo").Delete(&Token{}, 3)

	//set null 把关联外键置空
}
